/*============================================================================*/
/*                         The Freescale Cup                                 */
/*============================================================================*/
/*                        OBJECT SPECIFICATION                                */
/*============================================================================*
* %name:            %	APPLeds.c
* %version:         %	1.0
* %created_by:      %   Continental
* %date_created:    %   Sun Aug 21 16:20:00 2011 
*=============================================================================*/
/* DESCRIPTION : Contains applications that use the TRK-MPC5604B LEDS         */
/*============================================================================*/
/* FUNCTION COMMENT : comment here										      */
/*                                                                            */
/*                                                                            */
/*============================================================================*/
/*                               OBJECT HISTORY                               */
/*============================================================================*/
/*  REVISION |   DATE      |                               |      AUTHOR      */
/*----------------------------------------------------------------------------*/
/*  1.0      | 21/08/2011  |                               | Continental     */
/* Application using LEDS to show the scheduler working                       */
/*============================================================================*/

/* Includes */
/* -------- */
#include "stdtypedef.h"
#include "APPCamera.h"
#include "MALADC.h"

//Variables que usaran otras funciones

//Varibles que usa de otras funciones 

/* Functions macros, constants, types and datas         */
/* ---------------------------------------------------- */
/* Functions macros */

/*==================================================*/ 
/* Definition of constants                          */
/*==================================================*/ 


/*======================================================*/ 
/* Definition of RAM variables                          */
/*======================================================*/ 
T_UBYTE rub_JPos,rub_LPos,rub_MenorPos,rub_MayorPos,rub_APos,rub_BlancoPos;
T_UWORD ruw_ResMenorPos,ruw_ResultadoPos[128],ruw_ResMayorPos;
T_SBYTE rsb_CenterLinePos;

T_UBYTE rub_JVel,rub_LVel,rub_MenorVel,rub_MayorVel,rub_AVel,rub_BlancoVel;
T_UWORD ruw_ResMenorVel,ruw_ResultadoVel[128],ruw_ResMayorVel;
T_SBYTE rsb_CenterLineVel;

/*======================================================*/ 
/* close variable declaration sections                  */
/*======================================================*/ 

/* Private defines */

/* Private functions prototypes */
/* ---------------------------- */

/* Exported functions prototypes */
/* ----------------------------- */


/**************************************************************
*  Name                 : APPCamera_Pos
*  Description          : Programa para la camara que detecta posicion
						   
*  Parameters           :  none
*  Return               :  none
*  Critical/explanation :  No
**************************************************************/
void APPCamera_Pos(void)
{

 //  while(1)
 //  {
   	
         PE4_SI_HIGH;      
         delayled();
         PE5_CLK_HIGH;      
         delayled();
         PE4_SI_LOW;
         delayled();
         PE5_CLK_LOW;
         delayled();
         
         for(rub_JPos=1;rub_JPos<=128;rub_JPos++) //Para adquirir los 128 pixeles
         {
            delayled();
            PE5_CLK_HIGH;      
            ADCStartConvertion();                //COMIENZA LA CONVERSION
            while (Convertion_executing() == 1) {};  //ESPERA HASTA TERMINAR LA CONVERSION
            ruw_ResultadoPos[rub_JPos]= ADCReadValue(ANP_0);     //ALMACENA RESULTADO DE CONVERSION   
            delayled();
            PE5_CLK_LOW; 
            
            
        }
        
        //CODIGO PARA ENCONTRAR EL VALOR DE CONVERSION MENOR
        ruw_ResMenorPos=ruw_ResultadoPos[5];
        rub_MenorPos=5;
        for(rub_LPos=6;rub_LPos<=123;rub_LPos++)
        {
        if(ruw_ResultadoPos[rub_LPos]<ruw_ResMenorPos)
        {
           ruw_ResMenorPos=ruw_ResultadoPos[rub_LPos];
           rub_MenorPos=rub_LPos;
        }
           
        }
        
        //CODIGO PARA ENCONTRAR EL VALOR DE CONVERSION MAYOR
        ruw_ResMayorPos=ruw_ResultadoPos[5];
        rub_MayorPos=5;
        for(rub_APos=6;rub_APos<=123;rub_APos++)
        {
        if(ruw_ResultadoPos[rub_APos]>ruw_ResMayorPos)
        {
           ruw_ResMayorPos=ruw_ResultadoPos[rub_APos];
           rub_MayorPos=rub_APos;
        }
           
        }
        
        //RESETEAR VARIABLES
           	rub_LPos=0;
            rub_JPos=0;
            rub_APos=0;
           
          //****CODIGO DE CONDICIONES DE PISTA*//////
       
       if(((ruw_ResMayorPos-ruw_ResMenorPos)<205)) //si la diferencia es menor a 1 Volt 
        {
        	rub_BlancoPos=1; //Hacemos variable rub_Blanco=1
        	rsb_CenterLinePos=(T_SBYTE)(rub_MenorPos-64); 
        }
        else 
        {
           	if( (ruw_ResultadoPos[10]<820) & (ruw_ResultadoPos[118]<820) )  // Si los extremos son menores a  
        	                                                          // 4 volts es linea de Inicio/Final
        	{
        	 	rub_BlancoPos=1; //Se detecta una linea de Inicio/Final
        	 	rsb_CenterLinePos=(T_SBYTE)(rub_MenorPos-64);	
        	}
        	else
        	{
        		rub_BlancoPos=0;//Se detecta linea normal
        		rsb_CenterLinePos=(T_SBYTE)(rub_MenorPos-64); 
        	}
        }
         
   //  } CICLO INFINITO
	
 }
 

/**************************************************************
*  Name                 : APPCamera_Vel
*  Description          : Programa de camara para control de velocidad
						   
*  Parameters           :  none
*  Return               :  none
*  Critical/explanation :  No
**************************************************************/
void APPCamera_Vel(void)
{

	//  while(1)
 //  {
   	
         PG4_SI_HIGH;      
         delayled();
         PG5_CLK_HIGH;      
         delayled();
         PG4_SI_LOW;
         delayled();
         PG5_CLK_LOW;
         delayled();
         
         for(rub_JVel=1;rub_JVel<=128;rub_JVel++) //Para adquirir los 128 pixeles
         {
            delayled();
            PG5_CLK_HIGH;      
            ADCStartConvertion();                //COMIENZA LA CONVERSION
            while (Convertion_executing() == 1) {};  //ESPERA HASTA TERMINAR LA CONVERSION
            ruw_ResultadoVel[rub_JVel]= ADCReadValue(ANP_1);     //ALMACENA RESULTADO DE CONVERSION   
            delayled();
            PG5_CLK_LOW; 
            
            
        }
        
        //CODIGO PARA ENCONTRAR EL VALOR DE CONVERSION MENOR
        ruw_ResMenorVel=ruw_ResultadoVel[10];
        rub_MenorVel=10;
        for(rub_LVel=11;rub_LVel<=118;rub_LVel++)
        {
        if(ruw_ResultadoVel[rub_LVel]<ruw_ResMenorVel)
        {
           ruw_ResMenorVel=ruw_ResultadoVel[rub_LVel];
           rub_MenorVel=rub_LVel;
        }
           
        }
        
        //CODIGO PARA ENCONTRAR EL VALOR DE CONVERSION MAYOR
        ruw_ResMayorVel=ruw_ResultadoVel[10];
        rub_MayorVel=10;
        for(rub_AVel=11;rub_AVel<=118;rub_AVel++)
        {
        if(ruw_ResultadoVel[rub_AVel]>ruw_ResMayorVel)
        {
           ruw_ResMayorVel=ruw_ResultadoVel[rub_AVel];
           rub_MayorVel=rub_AVel;
        }
           
        }
        
        //RESETEAR VARIABLES
           	rub_LVel=0;
            rub_JVel=0;
            rub_AVel=0;
           
          //****CODIGO DE CONDICIONES DE PISTA*//////
       
       if(((ruw_ResMayorVel-ruw_ResMenorVel)<205)) //si la diferencia es menor a 1 Volt 
        {
        	rub_BlancoVel=1; //Hacemos variable rub_Blanco=1
        	rsb_CenterLineVel=(T_SBYTE)(rub_MenorVel-64); 
        }
        else 
        {
           	if( (ruw_ResultadoVel[10]<716) & (ruw_ResultadoVel[118]<716) )  // Si los extremos son menores a  
        	                                                          // 3.5 volts es linea de Inicio/Final
        	{
        	 	rub_BlancoVel=1; //Se detecta una linea de Inicio/Final
        	 	rsb_CenterLineVel=(T_SBYTE)(rub_MenorVel-64);	
        	}
        	else
        	{
        		rub_BlancoVel=0;//Se detecta linea normal
        		rsb_CenterLineVel=(T_SBYTE)(rub_MenorVel-64); 
        	}
        }
         
   //  } CICLO INFINITO
  	
}

 
